package flow

import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking

fun main(args: Array<String>) {
    runBlocking {
        // zip 是 一一 对应 组合。数量不同 以最少为准。
        val nums = (1..3).asFlow()
        val keys = flowOf("one", "two", "three", "four")
        nums.zip(keys) { a, b ->
            "$a -> $b"
        }.collect {
            println(it)
        }

        // combine 是 任意一个流 每次更新时，都会调用一次；而 zip 是 等待然后一起组装
        val nums2 = (1..3).asFlow().onEach { delay(300) }
        val keys2 = flowOf("one", "two", "three", "four").onEach { delay(400) }
        nums2.combine(keys2) { a, b ->
            "$a -> $b"
        }.collect {
            println(it)
        }
    }
}